// Object.defineProperty() 方法会直接在一个对象上定义一个新属性，或者修改一个对象的现有属性，并返回此对象。
// 数据劫持

const obj = {
  a: 3,
  b: 4,
};

/*
  里面要传入三个参数
    1. 要定义属性的对象。
    2. 要定义或修改的属性的名称或 Symbol 。
    3. 要定义或修改的属性描述符。
*/
let a;
Object.defineProperty(obj, "a", {
  get() {
    // get方法会在这个对象的该属性被访问的时候调用
    console.log("get");
    // get方法必须要return，return的值就是这个属性取到的值
    return a;
  },
  set(val) {
    // set方法会在这个对象的该属性被修改的时候调用
    console.log("set", val);
    a = val;
    // 渲染页面
  },
});

// console.log(obj.a);
obj.a = 30;
console.log(obj.a);
